@@ -1,4 +1,18 @@
+1.03 2011-01-12 11:36
+ New features:
+ - Google Calendar formatter
+
+ Bug fixes:
+ - Really fix tagged descendants by date for postgres
+
+ Improvements:
+ - Korean Translation <JEEN>
+ - popular account link formatter via {{id:$service $account_name}} <bayashi>
+ e.g. {{id::cpan bayashi}} gets rendered as <a href="http://search.cpan.org/~bayashi/">bayashi</a>
+ - Show tags only once for 'Popular' and 'My' categories
+
+1.02 2010-08-30 04:20
Bug fixes:
- Fix tagged descendants by date for postgresql
- Fix root setting to actually be used.
@@ -45,7 +45,9 @@ lib/MojoMojo/Formatter/File/DocBook.pm
lib/MojoMojo/Formatter/File/Image.pm
lib/MojoMojo/Formatter/File/Pod.pm
lib/MojoMojo/Formatter/File/Text.pm
+lib/MojoMojo/Formatter/GoogleCalendar.pm
lib/MojoMojo/Formatter/GoogleSearch.pm
+lib/MojoMojo/Formatter/IDLink.pm
lib/MojoMojo/Formatter/Include.pm
lib/MojoMojo/Formatter/IRCLog.pm
lib/MojoMojo/Formatter/Main.pm
@@ -75,6 +77,7 @@ lib/MojoMojo/I18N/it.js.po
lib/MojoMojo/I18N/it.po
lib/MojoMojo/I18N/ja.js.po
lib/MojoMojo/I18N/ja.po
+lib/MojoMojo/I18N/ko.po
lib/MojoMojo/I18N/no.js.po
lib/MojoMojo/I18N/no.po
lib/MojoMojo/I18N/pl.js.po
@@ -436,6 +439,7 @@ script/mojomojo_spawn_db.pl
script/mojomojo_test.pl
script/mojomojo_update_db.pl
script/update_po.sh
+script/util/bust_cache.pl
script/util/dbk2xhtml.pl
script/util/delete_page.pl
script/util/dir2mojomojo.pl
@@ -478,6 +482,7 @@ t/formatter_dir.t
t/formatter_docbook.t
t/formatter_file.t
t/formatter_googlesearch.t
+t/formatter_idlink.t
t/formatter_include.t
t/formatter_irclog.t
t/formatter_markdown.t
@@ -3,7 +3,7 @@ abstract: 'A Catalyst & DBIx::Class powered Wiki.'
author:
- 'Marcus Ramberg C<marcus@nordaaker.com>'
build_requires:
- Email::Sender::Simple: 0.100110
+ Email::Sender::Simple: 0.102370
ExtUtils::MakeMaker: 6.42
SQL::Translator: 0.09006
Test::Differences: 0
@@ -107,4 +107,4 @@ resources:
homepage: http://mojomojo.org
license: http://dev.perl.org/licenses/
repository: http://github.com/marcusramberg/mojomojo/
-version: 1.02
+version: 1.03
@@ -12,7 +12,6 @@ requires(
'Algorithm::Diff' => '1.1901',
'Algorithm::Merge' => 0,
'Archive::Zip' => '1.14',
- 'MRO::Compat' => '0.10',
'Cache::FastMmap' => 1.31, # deleted /tmp/sharefile-* when MM is killed
'Catalyst' => '5.71001',
'Catalyst::Action::RenderView' => '0.07',
@@ -62,6 +61,7 @@ requires(
'KinoSearch1' => '1.00',
'Module::Pluggable::Ordered' => '1.4',
'Moose' => 0,
+ 'MRO::Compat' => '0.10',
'Number::Format' => 0,
'parent' => 0,
'Template' => '2.20',
@@ -99,7 +99,7 @@ test_requires 'Test::Differences';
# all tests require a database to be deployed, even though SQLT is not necessary for producton if a DB exists
test_requires 'SQL::Translator' => '0.09006';
-test_requires 'Email::Sender::Simple' => '0.100110';
+test_requires 'Email::Sender::Simple' => '0.102370';
test_requires 'WWW::Mechanize' => '1.54';
test_requires 'Test::WWW::Mechanize::Catalyst' => '0.51';
test_requires 'WWW::Mechanize::TreeBuilder' => '1.10000';
@@ -117,9 +117,11 @@ sub tag : Local Args(1) {
if (
$tag
&& !$c->model("DBIC::Tag")->search(
- page => $page->id,
- person => $c->req->{user_id},
- tag => $tagname
+ {
+ page => $page->id,
+ person => $c->req->{user_id},
+ tag => $tagname,
+ }
)->next()
)
{
@@ -310,7 +310,7 @@ sub list : Global {
my @backlinks_viewable =
- $c->model("DBIC::Link")->search( to_page => $page->id );
+ $c->model("DBIC::Link")->search( {to_page => $page->id} );
if ( $c->pref('check_permission_on_view') ) {
my $user;
if ( $c->user_exists() ) { $user = $c->user->obj; }
@@ -0,0 +1,83 @@
+package MojoMojo::Formatter::GoogleCalendar;
+
+#use strict;
+use parent 'MojoMojo::Formatter';
+
+#my $dependencies_installed = !$@;
+#sub module_loaded { $dependencies_installed }
+
+our $VERSION = '0.1';
+
+=head1 NAME
+
+MojoMojo::Formatter::GoogleCalendar - Embed Google Calendar
+
+=head1 DESCRIPTION
+
+Embed Goodle Calendar in wiki page {{gcal <url> <width>,<height> <alignment>}}.
+
+=head1 METHODS
+
+=head2 format_content_order
+
+Format order can be 1-99. The Google Calendar formatter runs on 20.
+
+=cut
+
+sub format_content_order { 20 }
+
+=head2 format_content
+
+Calls the formatter. Takes a ref to the content as well as the
+context object.
+
+=cut
+
+sub format_content {
+ my ( $class, $content, $c ) = @_;
+ my ( $width, $height, $align );
+ my $default_width = 600;
+ my $default_height = 400;
+ my $default_alignment = 'center';
+ my %alignment_style = (
+ 'center' => 'margin:auto;width:70%',
+ 'right' => 'float:right;width:70%',
+ 'left' => 'float:left;width:70%'
+ );
+ my @lines = split /\n/, $$content;
+ my $re = $class->gen_re(qr/gcal\s+(.*?)\s+(\d+),(\d+)\s+(\w+)/);
+ $$content = "";
+ $c->stash->{precompile_off} = 1;
+
+ foreach my $line (@lines) {
+ if ( $line =~ m/$re/ ) {
+ !defined($2) ? $height = $default_height : $height = $2;
+ !defined($3) ? $width = $default_width : $width = $3;
+ !defined($4)
+ ? $align = $alignment_style{$default_alignment}
+ : $align = $alignment_style{$4};
+ $line =
+"<div style='$align;border:1'><iframe src='$1' height='$height' width='$width' style='border-width:0; margin-left:auto; margin-right:auto' frameborder='0' scrolling='no'></iframe></div>";
+ }
+ $$content .= $line . "\n";
+ }
+ return $content;
+
+}
+
+=head1 SEE ALSO
+
+L<MojoMojo>, L<Module::Pluggable::Ordered>, L<URI::Fetch>
+
+=head1 AUTHORS
+
+Jurnell Cockhren <jurnell.cockhren@vanderbilt.edu>
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
@@ -0,0 +1,117 @@
+package MojoMojo::Formatter::IDLink;
+use strict;
+use warnings;
+use parent qw/MojoMojo::Formatter/;
+
+=head1 NAME
+
+MojoMojo::Formatter::IDLink - Linked {{id:<service name> <word>}}
+
+=cut
+
+my $CONF = {
+ tw => 'http://twitter.com/%s',
+ htb => 'http://b.hatena.ne.jp/%s',
+ htd => 'http://d.hatena.ne.jp/%s',
+ cpan => 'http://search.cpan.org/~%s/',
+ fb => 'http://facebook.com/%s',
+};
+
+my $DEFAULT = 'tw';
+
+=head1 DESCRIPTION
+
+if you write:
+
+ {{id bayashi}}
+
+it will format like this
+
+ <a href="http://twitter.com/bayashi">bayashi</a>
+
+you can write:
+
+ {{id:cpan bayashi}}
+
+it will format like this
+
+ <a href="http://search.cpan.org/~bayashi/">bayashi</a>
+
+=head1 METHODS
+
+=head2 format_content_order
+
+The IDLink formatter has no special requirements
+in terms of the order it gets run in, so it has a priority of 10.
+
+=cut
+
+sub format_content_order { 10 }
+
+=head2 format_content
+
+Calls the formatter. Takes a ref to the content as well as the context object.
+
+=cut
+
+sub format_content {
+ my ( $class, $content, $c ) = @_;
+
+ return unless $$content;
+
+ my @lines = split /\n/, $$content;
+ $$content = '';
+
+ my $re = $class->gen_re( qr/id(?::([^\s]+))?\s+(.+)/ );
+
+ for my $line (@lines) {
+ if ( $line =~ m/$re/ ) {
+ $line = $class->process($c, $line, $re, $1, $2);
+ }
+ $$content .= $line . "\n";
+ }
+
+}
+
+=head2 process
+
+Here the actual formatting is done.
+
+=cut
+sub process {
+ my $class = shift;
+ my ($c, $line, $re, $site, $id) = @_;
+
+ $site ||= $DEFAULT;
+
+ unless ($CONF->{$site}) {
+ my $sites = join ',', keys %{$CONF};
+ $line =~ s/$re/"IDLink: ". $c->loc('identifier is wrong.'). " use [$sites]"/e;
+ return $line;
+ }
+
+ my $url = sprintf($CONF->{$site}, $id);
+
+ $line =~ s!$re!<a href="$url">$id</a>!;
+ $c->stash->{precompile_off} = 1;
+
+ return $line;
+}
+
+
+=head1 SEE ALSO
+
+L<MojoMojo> and L<Module::Pluggable::Ordered>.
+
+=head1 AUTHORS
+
+Dai Okabayashi, L<bayashi at cpan . org>
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
@@ -0,0 +1,2026 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8 \n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: root/base/user/profile.tt:11
+msgid "(Private)"
+msgstr "(비공식)"
+
+#: root/base/user/profile.tt:16 root/base/user/profile.tt:19 root/base/user/profile.tt:22 root/base/user/profile.tt:9
+msgid "(Unknown)"
+msgstr "(알려지지않음)"
+
+#: root/base/edithelp.tt:60
+msgid "**bold** or __bold__"
+msgstr "**볼드** 또는 __볼드__"
+
+#: root/base/edithelp.tt:59
+msgid "*italic* or _italic_"
+msgstr "*이탤릭* 또는 _이탤릭_"
+
+#: root/base/edithelp.tt:154
+msgid "3 or more dashes or asterisks"
+msgstr "3개 이상의 하이픈, 또는 아스테리스크(*)"
+
+#: root/base/toolbar.tt:38 root/base/toolbar.tt:8
+msgid "<xml> and such.\\nor pure text."
+msgstr ""
+
+#: root/base/message.tt:2
+msgid "A message from our sponsors..."
+msgstr ""
+
+#: root/base/header.tt:21 root/base/header.tt:23 root/base/page/atom.tt:3 root/base/page/atom.tt:6
+msgid "A poorly configured MojoMojo Installation"
+msgstr ""
+
+#: root/base/page/recent.tt:41
+msgid "Actions"
+msgstr "액션"
+
+#: root/base/admin/role.tt:16 root/base/admin/user.tt:8
+msgid "Active"
+msgstr "유효"
+
+#: root/base/page/info.tt:12
+msgid "Active version"
+msgstr ""
+
+#: root/base/admin/role_form.tt:9
+msgid "Active?"
+msgstr ""
+
+#: root/base/page/addtags.tt:6
+msgid "Add"
+msgstr "추가"
+
+#: root/base/page/addtags.tt:1
+msgid "Add tag"
+msgstr "태그추가"
+
+#: root/base/page/view.tt:25
+msgid "Added"
+msgstr ""
+
+#: root/base/user/profile.tt:15
+msgid "Age"
+msgstr "나이"
+
+#: root/base/page/list.tt:16 root/base/tag/list.tt:5
+msgid "All Pages"
+msgstr "모든 페이지"
+
+#. (page.path)
+#: root/base/page/list.tt:1
+msgid "All Pages in x"
+msgstr "「%1」아래의 모든 페이지"
+
+#. (page.name)
+#: root/base/page/list.tt:17
+msgid "All pages in x listed alphabetically"
+msgstr "「%1」아래의 모든 페이지(알파벳순)"
+
+#. (activetag)
+#: root/base/tag/list.tt:21
+msgid "All pages tagged with x listed alphabetically"
+msgstr "All pages tagged with %1 listed alphabetically"
+
+#: root/base/tag/cloud.tt:9
+msgid "All tags"
+msgstr ""
+
+#: root/base/navbar.tt:40 root/base/navbar.tt:45
+msgid "All tags in this path"
+msgstr ""
+
+#: root/base/navbar.tt:43
+msgid "All tags on photos"
+msgstr ""
+
+#: root/base/edithelp.tt:26
+msgid "Allow comments on this page."
+msgstr ""
+
+#: root/base/navbar.tt:32 root/base/navbar.tt:34
+msgid "Alphabetically sorted list of pages"
+msgstr ""
+
+#: root/base/toolbar.tt:2
+msgid "Also try h2,h3 and so on"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:255
+msgid "An error occourred. Sorry."
+msgstr ""
+
+#: root/base/edithelp.tt:131
+msgid "An h2 tag in a blockquote"
+msgstr ""
+
+#: root/base/edithelp.tt:134
+msgid "An unordered list"
+msgstr ""
+
+#: root/base/edithelp.tt:133
+msgid "And additional Markdown formatting"
+msgstr ""
+
+#: root/base/edithelp.tt:31
+msgid "And others."
+msgstr ""
+
+#:
+msgid "Anonymous User (blank to disable)"
+msgstr "이름없는 유저(공백을 넣으면 무효가 됩니다)"
+
+#: root/base/gallery/photo_info.tt:8
+msgid "Aperture"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Attachment.pm:107
+msgid "Attachment not found."
+msgstr "첨부파일을 찾을 수 없습니다."
+
+#: root/base/page/editbar.tt:13 root/base/page/editbar.tt:18 root/base/page/editbar.tt:6 root/base/page/info.tt:30
+msgid "Attachments"
+msgstr "첨부파일"
+
+#: root/base/navbar.tt:48 root/base/navbar.tt:50
+msgid "Authors"
+msgstr "멤버"
+
+#: root/base/page/bottomnav.tt:24 root/base/page/bottomnav.tt:35
+msgid "Back in time"
+msgstr "과거의 상태"
+
+#: root/base/page/bottomnav.tt:38
+msgid "Back to the page"
+msgstr "페이지로 돌아가기"
+
+#: root/base/page/list.tt:27
+msgid "Backlinks"
+msgstr "링크"
+
+#:
+msgid "Birth Date"
+msgstr "생일"
+
+#: root/base/edithelp.tt:127
+msgid "Block quotes"
+msgstr "블록인용"
+
+#: root/base/edithelp.tt:130
+msgid "Blockquotes can be nested"
+msgstr ""
+
+#: root/base/toolbar.tt:19 root/base/toolbar.tt:41
+msgid "Bold"
+msgstr ""
+
+#: root/base/toolbar.tt:35 root/base/toolbar.tt:5
+msgid "Bullet list"
+msgstr ""
+
+#: root/base/edithelp.tt:25
+msgid "Bulleted list"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:5
+msgid "Camera"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Attachment.pm:169
+msgid "Can only make inline version of photos"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Attachment.pm:150
+msgid "Can only make thumbnails of photos"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:114
+msgid "Cannot find that user."
+msgstr ""
+
+#: lib/MojoMojo/Controller/Admin.pm:66
+msgid "Cant find admin user: "
+msgstr ""
+
+#: root/base/toolbar.tt:15
+msgid "Centered paragraph"
+msgstr ""
+
+#: root/base/navbar.tt:18 root/base/page/bottomnav.tt:13
+msgid "Change page content"
+msgstr ""
+
+#: root/base/user/prefs.tt:6
+msgid "Change password"
+msgstr "패스워드 변경"
+
+#: root/base/user/profile.tt:46
+msgid "Change profile content"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:16
+msgid "Change site settings"
+msgstr ""
+
+#: root/base/page/info.tt:18
+msgid "Children"
+msgstr ""
+
+#: root/base/page/attachments.tt:14
+msgid "Choose attachments"
+msgstr ""
+
+#: root/base/edithelp.tt:121
+msgid "Circle"
+msgstr ""
+
+#: root/base/gallery/photo.tt:32
+msgid "Click for original version"
+msgstr ""
+
+#: root/base/page/suggest.tt:21
+msgid "Click on any non-existent page to create it. Any missing pages above it will be created automatically."
+msgstr ""
+
+#: root/base/edithelp.tt:137
+msgid "Code Spans"
+msgstr ""
+
+#: root/base/comment.tt:5
+msgid "Comment"
+msgstr ""
+
+#: root/forms/comment/comment.yml:17
+msgid ""
+"Comment body\n"
+" constraints:\n"
+" - Required\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Register\n"
+msgstr ""
+
+#: root/base/comment.tt:5
+msgid "Comments"
+msgstr ""
+
+#: root/base/page/info.tt:15
+msgid "Content size"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:52 root/base/comment/login.tt:6
+msgid "Could not authenticate that login."
+msgstr ""
+
+#. ($file)
+#: lib/MojoMojo/Controller/Attachment.pm:60
+msgid "Could not create attachment from x"
+msgstr "Could not create attachment from %1"
+
+#:
+msgid "Create"
+msgstr "작성"
+
+#: root/base/admin/create_role.tt:9
+msgid "Create Role"
+msgstr ""
+
+#: root/base/admin/role.tt:11 root/base/admin/role.tt:30
+msgid "Create a new role"
+msgstr ""
+
+#: root/base/page/edit.tt:56
+msgid "Create and View"
+msgstr ""
+
+#: root/base/edithelp.tt:155
+msgid "Creates"
+msgstr ""
+
+#: root/base/page/edit.tt:6
+msgid "Creating"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:38
+msgid "Current Revision"
+msgstr "현재 리비젼現"
+
+#:
+msgid "Current password"
+msgstr "현재 패스워드 "
+
+#: root/forms/user/password.yml:29
+msgid ""
+"Current password\n"
+" constraints:\n"
+" - Required\n"
+" - type: Password\n"
+" name: pass\n"
+" label_loc: New password\n"
+" constraints:\n"
+" - Required\n"
+" - type: Password\n"
+" name: pass_again\n"
+" label_loc: New password again\n"
+" constraints:\n"
+" - type: Equal\n"
+" others: pass\n"
+" message_loc: 'Password did not match'\n"
+" - Required\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Save\n"
+msgstr ""
+
+#: root/base/user/profile.tt:33
+msgid "Date registered"
+msgstr "등록일"
+
+#: root/base/toolbar.tt:23 root/base/toolbar.tt:45
+msgid "Deleted Text"
+msgstr "삭제된 텍스트"
+
+#: root/base/page/info.tt:21
+msgid "Descendants"
+msgstr ""
+
+#: root/base/user/validate.tt:19
+msgid "Didn't receive an email?"
+msgstr "메일을 받지 못했을 경우"
+
+#: root/base/navbar.tt:56 root/base/navbar.tt:58
+msgid "Download a zip with all the pages in this wiki"
+msgstr "Wiki 내용을 ZIP형식으로 다운로드"
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:135
+msgid "END OF CONFLICT"
+msgstr ""
+
+#: root/base/admin/role.tt:23 root/base/page/editbar.tt:11 root/base/page/editbar.tt:17 root/base/page/permissions.tt:47
+msgid "Edit"
+msgstr "편집"
+
+#: root/base/navbar.tt:18
+msgid "Edit Page"
+msgstr "페이지 수정"
+
+#: root/base/user/profile.tt:46
+msgid "Edit Profile"
+msgstr "프로필 수정"
+
+#: root/base/admin/edit_role.tt:9
+msgid "Edit Role"
+msgstr "역할 수정"
+
+#: root/base/page/bottomnav.tt:16
+msgid "Edit Settings"
+msgstr "설정 변경"
+
+#: root/base/page/recent.tt:39
+msgid "Edited by"
+msgstr "편집자"
+
+#: root/base/page/edit.tt:4
+msgid "Editing"
+msgstr "「%1」를 편집중"
+
+#. (user.name)
+#: root/base/user/editprofile.tt:3
+msgid "Editing user profile for x"
+msgstr "Editing user profile for %1"
+
+#: root/base/user/profile.tt:6 root/base/user/recover_pass.tt:10 root/base/user/validate.tt:26
+msgid "Email"
+msgstr "메일주소"
+
+#: root/base/user/validate.tt:4
+msgid "Email Validation"
+msgstr "메일 주소 확인"
+
+#: lib/MojoMojo/Controller/User.pm:188
+msgid "Emailed you your new password."
+msgstr ""
+
+#: root/base/toolbar.tt:37 root/base/toolbar.tt:7
+msgid "Enum list"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:191
+msgid "Error occurred while emailing you your new password."
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:1
+msgid "Exif Data"
+msgstr ""
+
+#: root/base/page/suggest.tt:4
+msgid "Existent Pages"
+msgstr ""
+
+#: root/base/export.tt:1 root/base/navbar.tt:56 root/base/navbar.tt:58
+msgid "Export"
+msgstr "보내기"
+
+#: root/base/toolbar.tt:27 root/base/toolbar.tt:49
+msgid "External Link"
+msgstr "외부링크"
+
+#:
+msgid "Favorite Albums"
+msgstr "좋아하는 앨범"
+
+#:
+msgid "Favorite Movies"
+msgstr "좋아하는 영화"
+
+#: root/base/navbar.tt:54
+msgid "Feeds"
+msgstr "피드"
+
+#: root/base/user/validate.tt:22
+msgid "Fill in the email address you want to use here"
+msgstr "액티베이션을 보내고 싶은 메일주소를 아래에 써주세요"
+
+#: root/base/edithelp.tt:36
+msgid "Format content until next =pod as plain old documentation"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:50
+msgid "Format page for printing"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:28 root/base/page/bottomnav.tt:32
+msgid "Forward in time"
+msgstr "이 후의 상태"
+
+#: root/base/page/permissions.tt:10
+msgid "From"
+msgstr ""
+
+#: root/base/feeds.tt:6 root/base/feeds.tt:8
+msgid "Full content"
+msgstr "전체글"
+
+#: root/base/navbar.tt:72
+msgid "Gallery"
+msgstr ""
+
+#: root/base/user/profile.tt:18
+msgid "Gender"
+msgstr "성별"
+
+#: root/base/navbar.tt:28
+msgid "Get in there"
+msgstr ""
+
+#: root/base/page/search.tt:13 root/base/page/search_inline.tt:3
+msgid "Go"
+msgstr ""
+
+#: root/base/message.tt:6
+msgid "Go directly to "
+msgstr ""
+
+#: root/base/navbar.tt:21
+msgid "Go to home page"
+msgstr ""
+
+#: root/base/edithelp.tt:149
+msgid "Going back to normal formatting"
+msgstr ""
+
+#: root/base/export.tt:6
+msgid "HTML"
+msgstr ""
+
+#: root/base/mail/reset_password.tt:8
+msgid "Have a nice day"
+msgstr ""
+
+#: root/base/edithelp.tt:71 root/base/edithelp.tt:72 root/base/edithelp.tt:75 root/base/edithelp.tt:76
+msgid "Header 1"
+msgstr ""
+
+#: root/base/edithelp.tt:79 root/base/edithelp.tt:80 root/base/edithelp.tt:83 root/base/edithelp.tt:84
+msgid "Header 2"
+msgstr ""
+
+#: root/base/edithelp.tt:87 root/base/edithelp.tt:88
+msgid "Header 6"
+msgstr ""
+
+#: root/base/edithelp.tt:69
+msgid "Headers"
+msgstr ""
+
+#: root/base/feeds.tt:7
+msgid "Headlines"
+msgstr "헤드라인"
+
+#. (page.name_orig)
+#: root/base/page/rss.tt:6
+msgid "Headlines for x"
+msgstr "Headlines for %1"
+
+#: root/base/mail/reset_password.tt:1
+msgid "Hi there."
+msgstr ""
+
+#. (user.name)
+#: root/base/mail/validate.tt:1
+msgid "Hi. This is a mail to validate your email address, x. To confirm, please click the url below:"
+msgstr "Hi. This is a mail to validate your email address, %1. To confirm, please click the url below:"
+
+#: root/base/page/bottomnav.tt:46
+msgid "Hide changes"
+msgstr "변경부분을 표시하지 않음"
+
+#: root/base/page/suggest.tt:8 root/base/page/wrapper.tt:7 root/base/sidebar.tt:21
+msgid "Home"
+msgstr ""
+
+#: root/base/edithelp.tt:10 root/base/edithelp.tt:52
+msgid "HomePage, ThreeWordsTogether, [[C++]], [[Lets play again!]] ((easy to type))"
+msgstr ""
+
+#: root/base/edithelp.tt:152
+msgid "Horizontal Rules"
+msgstr ""
+
+#: root/base/gallery.tt:13
+msgid "Hover over an image to get more info."
+msgstr ""
+
+#: root/base/edithelp.tt:12 root/base/edithelp.tt:54
+msgid "IBM, School"
+msgstr ""
+
+#: root/base/admin/role.tt:16
+msgid "ID"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:7
+msgid "ISO"
+msgstr ""
+
+#: root/base/edithelp.tt:63
+msgid "IdLabel"
+msgstr ""
+
+#: root/base/page/attachments.tt:16
+msgid "If the flash uploader gives you problems, switch to the"
+msgstr "이 페이지에서는 Flash 업로더를 사용하고 있습니다. 사용하시는 환경에서 제대로 동작하지 않는 경우는 심플 업로더로 바꿔주세요."
+
+#. (link)
+#: root/base/user/validate.tt:32
+msgid "If you are unable to validate, please x"
+msgstr "확인이 되지 않는 경우는 %1"
+
+#: root/base/edithelp.tt:38
+msgid "Image"
+msgstr ""
+
+#: root/base/edithelp.tt:64
+msgid "Images"
+msgstr ""
+
+#: root/base/user/profile.tt:21
+msgid "Industry"
+msgstr "직업"
+
+#: root/base/page/permissions.tt:5
+msgid "Inherited permissions"
+msgstr ""
+
+#: root/base/edithelp.tt:66
+msgid "Inline"
+msgstr ""
+
+#: root/base/edithelp.tt:62
+msgid "Inline Links"
+msgstr ""
+
+#: root/base/user/profile.tt:24
+msgid "Interests"
+msgstr "좋아하는 것"
+
+#: root/base/toolbar.tt:25 root/base/toolbar.tt:47
+msgid "Internal Link"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:154
+msgid "Invalid password."
+msgstr ""
+
+#: root/base/toolbar.tt:21 root/base/toolbar.tt:43
+msgid "Italic"
+msgstr ""
+
+#: root/base/edithelp.tt:135
+msgid "Item"
+msgstr ""
+
+#: root/base/edithelp.tt:129
+msgid "Just like email quoting!"
+msgstr ""
+
+#: root/base/toolbar.tt:17
+msgid "Justified paragraph"
+msgstr ""
+
+#: root/base/user/profile.tt:36
+msgid "Last changes"
+msgstr "변경이력"
+
+#: root/base/edithelp.tt:63
+msgid "Later in the document"
+msgstr ""
+
+#: root/base/page/edit.tt:66
+msgid "Leave second blank if you do not want a password"
+msgstr ""
+
+#: root/base/toolbar.tt:11
+msgid "Left-justified paragraph"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:6
+msgid "Lens"
+msgstr ""
+
+#: root/base/edithelp.tt:62 root/base/edithelp.tt:63
+msgid "Link Title"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:56
+msgid "Linked from"
+msgstr ""
+
+#: root/base/edithelp.tt:61
+msgid "Links"
+msgstr ""
+
+#: root/base/page/info.tt:27
+msgid "Links from"
+msgstr ""
+
+#: root/base/page/info.tt:24
+msgid "Links to"
+msgstr ""
+
+#: root/base/page/list.tt:38
+msgid "Links to non-existent pages."
+msgstr "링크는 만들어졌지만, 아직 작성되지 않은 페이지"
+
+#. (activetag)
+#: root/base/tag/list.tt:20
+msgid "List by x"
+msgstr "List by %1"
+
+#: root/base/toolbar.tt:34 root/base/toolbar.tt:4
+msgid "List item 1"
+msgstr ""
+
+#: root/base/edithelp.tt:114
+msgid "Lists can be nested by indentation level"
+msgstr ""
+
+#: root/base/navbar.tt:28 root/base/user/login.tt:22
+msgid "Log in"
+msgstr "로그인"
+
+#: root/base/navbar.tt:26
+msgid "Log out"
+msgstr "로그아웃"
+
+#: root/base/user/login.tt:3
+msgid "Login"
+msgstr "로그인"
+
+#: root/forms/user/prefs.yml:31
+msgid ""
+"Login\n"
+" filters:\n"
+" - HTMLEscape\n"
+" constraints:\n"
+" - Required\n"
+" - Word\n"
+" - type: Text\n"
+" name: name\n"
+" label_loc: Name\n"
+" filters:\n"
+" - HTMLEscape\n"
+" - type: Text\n"
+" name: email\n"
+" label_loc: Email\n"
+" filters:\n"
+" - HTMLEscape\n"
+" constraints:\n"
+" - Required\n"
+" - type: Email\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Save\n"
+msgstr ""
+
+#: root/forms/user/register.yml:48
+msgid ""
+"Login\n"
+" filters:\n"
+" - LowerCase\n"
+" constraints:\n"
+" - Required\n"
+" - type: Password\n"
+" name: pass\n"
+" label_loc: Password\n"
+" constraints:\n"
+" - Required\n"
+" - type: Equal\n"
+" others: confirm_password\n"
+" message_loc: Password did not match\n"
+" - type: Length\n"
+" min: 4\n"
+" max: 14\n"
+" message_loc: Password must be between 4 and 14 chars\n"
+" - type: Password\n"
+" name: confirm_password\n"
+" label_loc: Repeat password\n"
+" - type: Text\n"
+" name: email\n"
+" label_loc: Email\n"
+" filters:\n"
+" - HTMLEscape\n"
+" constraints:\n"
+" - Email\n"
+" - Required\n"
+" - type: Text\n"
+" name: name\n"
+" label_loc: Name\n"
+" filters:\n"
+" - HTMLEscape\n"
+" constraints:\n"
+" - Required\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Register\n"
+msgstr ""
+
+#: root/base/toolbar.tt:3 root/base/toolbar.tt:33
+msgid "Main heading"
+msgstr ""
+
+#: root/base/page/rollback.tt:4
+msgid "Make current"
+msgstr ""
+
+#: root/base/toolbar.tt:30 root/base/toolbar.tt:52
+msgid "Mark some text to apply the toolbar actions to that text"
+msgstr "툴바에 있는 액션을 사용하기 위해서는 대상의 문자를 하이라이트해주세요"
+
+#: root/base/edithelp.tt:45
+msgid "Markdown formatting tips"
+msgstr ""
+
+#: root/base/mail/reset_password.tt:9
+msgid "MojoMojo - Spirit in a box"
+msgstr ""
+
+#: root/base/user/profile.tt:30
+msgid "Movies"
+msgstr "영화"
+
+#: root/base/user/profile.tt:27
+msgid "Music"
+msgstr "음악"
+
+#: root/base/page/tags.tt:2
+msgid "My tags"
+msgstr "나의 태그"
+
+#: root/base/admin/role.tt:16 root/base/user/profile.tt:3
+msgid "Name"
+msgstr "이름"
+
+#: root/forms/user/editprofile.yml:40
+msgid ""
+"Name\n"
+" - type: Date\n"
+" name: born\n"
+" label_loc: Birth Date\n"
+" auto_inflate: 1\n"
+" year:\n"
+" less: 70 \n"
+" plus: 0\n"
+" - type: Select\n"
+" name: gender\n"
+" label_loc: Gender\n"
+" options:\n"
+" - [ 'm', 'Male' ]\n"
+" - [ 'f', 'Female' ]\n"
+" - [ '?', 'Rather not say' ]\n"
+" - type: Text\n"
+" name: industry\n"
+" label_loc: Industry\n"
+" - type: Textarea\n"
+" name: interests\n"
+" label_loc: Interests\n"
+" - type: Textarea\n"
+" label_loc: Favorite Albums\n"
+" name: music\n"
+" - type: Textarea\n"
+" name: movies\n"
+" label_loc: Favorite Movies\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Update \n"
+msgstr ""
+
+#: root/base/user/profile.tt:4
+msgid "Name missing"
+msgstr ""
+
+#: root/base/edithelp.tt:139
+msgid "Nested backticks"
+msgstr ""
+
+#: root/base/user/register.tt:2
+msgid "New User Registration"
+msgstr "새로운 유저 등록"
+
+#:
+msgid "New User Registration open"
+msgstr "유저 등록 허가"
+
+#: root/base/page/search.tt:54 root/base/page/search_inline.tt:45
+msgid "Next"
+msgstr ""
+
+#: root/base/admin/role.tt:22
+msgid "No"
+msgstr ""
+
+#: root/base/comment.tt:21
+msgid "No Comments posted"
+msgstr ""
+
+#. (c.pref('main_formatter')
+#. (c.pref("main_formatter"))
+#: root/base/edithelp.tt:161
+msgid "No help yet for x"
+msgstr "No help yet for %1"
+
+#: root/base/admin/role_form.tt:25
+msgid "No members added yet."
+msgstr ""
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:39
+msgid "No permissions to edit this page"
+msgstr ""
+
+#: root/base/user/list.tt:13
+msgid "No recent changes"
+msgstr "최근의 변경은 없습니다"
+
+#: root/base/page/search.tt:24 root/base/page/search_inline.tt:15
+msgid "No results found"
+msgstr ""
+
+#: root/base/admin/role.tt:29
+msgid "No roles created yet."
+msgstr ""
+
+#. ($page->name)
+#: lib/MojoMojo/Controller/Page.pm:90
+msgid "No such revision for "
+msgstr ""
+
+#: root/base/page/suggest.tt:13
+msgid "Non-Existent Pages"
+msgstr ""
+
+#: root/base/page/permissions.tt:28
+msgid "None"
+msgstr ""
+
+#: root/base/edithelp.tt:145
+msgid "Normal Paragraph"
+msgstr ""
+
+#: root/base/page/list.tt:43
+msgid "Not found. Click to create this page."
+msgstr ""
+
+#: root/base/edithelp.tt:12 root/base/edithelp.tt:54
+msgid "Not wiki words"
+msgstr ""
+
+#: root/base/user/profile.tt:25 root/base/user/profile.tt:28 root/base/user/profile.tt:31
+msgid "Nothing entered"
+msgstr "-"
+
+#: root/base/edithelp.tt:29
+msgid "Numbered list"
+msgstr ""
+
+#: root/base/toolbar.tt:36 root/base/toolbar.tt:6
+msgid "Numbered list item"
+msgstr ""
+
+#: root/base/page/suggest.tt:3
+msgid "One or more pages in the requested path do not exist."
+msgstr ""
+
+#: root/base/edithelp.tt:67
+msgid "Optional Title"
+msgstr ""
+
+#. (link)
+#: root/base/tag/cloud.tt:10
+msgid "Or you can check out x instead"
+msgstr "혹은:%1"
+
+#: root/base/edithelp.tt:90
+msgid "Ordered Lists"
+msgstr ""
+
+#: root/base/page/list.tt:48
+msgid "Orphaned Pages"
+msgstr "링크가 없는 페이지"
+
+#: root/base/page/suggest.tt:23
+msgid "Other Suggestions"
+msgstr ""
+
+#: root/base/page/list.tt:28
+msgid "Other pages that link to this page."
+msgstr "이 페이지로 링크된 페이지"
+
+#: root/base/navbar.tt:66 root/base/navbar.tt:68 root/base/page/recent.tt:38
+msgid "Page"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:19 root/base/page/bottomnav.tt:21
+msgid "Page Info"
+msgstr "페이지정보"
+
+#. (page.path)
+#: root/base/page/info.tt:9
+msgid "Page info for x"
+msgstr "Page info for %1"
+
+#: root/base/page/bottomnav.tt:19 root/base/page/bottomnav.tt:21
+msgid "Page meta information"
+msgstr ""
+
+#: root/forms/pageadmin/edit.yml:17
+msgid ""
+"Page text\n"
+" constraints:\n"
+" - Required\n"
+" - type: Text\n"
+" name: creator\n"
+" label_loc: creator\n"
+" - type: Submit\n"
+" name: submit\n"
+msgstr ""
+
+#: root/base/navbar.tt:36 root/base/navbar.tt:38
+msgid "Pages sorted by when they were last changed"
+msgstr ""
+
+#: root/base/page/list.tt:49
+msgid "Pages to which no other pages link."
+msgstr "어디에도 링크되지 않은 페이지"
+
+#: root/base/user/login.tt:19
+msgid "Password"
+msgstr "패스워드"
+
+#:
+msgid "Password did not match"
+msgstr "패스워드가 일치하지 않습니다"
+
+#:
+msgid "Password must be between 4 and 14 chars"
+msgstr "패스워드는 4~14자로 정해주세요."
+
+#. ($page->name)
+#: lib/MojoMojo/Controller/Page.pm:71
+msgid "Permission Denied to view x"
+msgstr "「%1」를 볼 권한이 없습니다"
+
+#. ([ $permtocheck, $name ])
+#: lib/MojoMojo/Controller/PageAdmin.pm:89
+msgid "Permission Denied to x x"
+msgstr "「%1 %2」 권한이 없습니다"
+
+#: root/base/page/editbar.tt:15 root/base/page/editbar.tt:19 root/base/page/editbar.tt:9
+msgid "Permissions"
+msgstr "권한"
+
+#: root/base/page/permissions.tt:33
+msgid "Permissions for this page"
+msgstr "이 페이지에 대한 권한"
+
+#: root/base/navbar.tt:74
+msgid "Photo Album"
+msgstr ""
+
+#: root/base/page/info.tt:33
+msgid "Photos"
+msgstr "사진"
+
+#: root/base/toolbar.tt:29 root/base/toolbar.tt:51
+msgid "Picture"
+msgstr "그림"
+
+#: lib/MojoMojo/Controller/User.pm:33
+msgid "Please enter username and password"
+msgstr "유저이름과 패스워드를 입력해주세요"
+
+#: lib/MojoMojo/Controller/User.pm:214
+msgid "Please fill in the following information to register. All fields are mandatory."
+msgstr ""
+
+#: root/base/page/attachments.tt:15
+msgid "Please select a file to attach to this page. To upload multiple files, put them in a zip."
+msgstr "첨부할 파일을 선택해주세요. 여러개의 파일을 첨부할 경우에는 ZIP 형식의 파일을 지정해주세요."
+
+#: lib/MojoMojo/Controller/Jsrpc.pm:33
+msgid "Please type something"
+msgstr "입력해주세요"
+
+#: root/base/page/tags.tt:15
+msgid "Popular tags"
+msgstr "인기태그"
+
+#: root/base/comment/post.tt:5
+msgid "Post"
+msgstr "글쓰기"
+
+#: root/base/footer.tt:3
+msgid "Powered by Catalyst"
+msgstr ""
+
+#: root/base/navbar.tt:88 root/base/navbar.tt:90
+msgid "Preferences"
+msgstr "설정"
+
+#: root/base/edithelp.tt:142
+msgid "Preformatted Code Blocks"
+msgstr "포맷이 정해진 코드블록"
+
+#: root/base/toolbar.tt:39 root/base/toolbar.tt:9
+msgid "Preformatted text"
+msgstr "포맷이 정해진 텍스트"
+
+#: root/base/page/editbar.tt:4
+msgid "Preview"
+msgstr "미리보기"
+
+#: root/base/page/search.tt:48 root/base/page/search_inline.tt:39
+msgid "Previous"
+msgstr "앞"
+
+#: root/base/page/bottomnav.tt:50
+msgid "Print"
+msgstr "프린트"
+
+#: root/base/navbar.tt:81 root/base/navbar.tt:83
+msgid "Profile"
+msgstr "프로필"
+
+#: root/base/export.tt:7
+msgid "Raw markup"
+msgstr "직접편집"
+
+#: root/base/navbar.tt:36 root/base/navbar.tt:38
+msgid "Recent"
+msgstr "최근 변경"
+
+#: root/base/tag/recent.tt:3
+msgid "Recent Pages"
+msgstr ""
+
+#. (page.path)
+#: root/base/page/atom.tt:10 root/base/page/rss.tt:8 root/base/page/rss_full.tt:7
+msgid "Recent changes in x"
+msgstr "Recent changes in %1"
+
+#. (page.path)
+#. (activetag)
+#: root/base/page/recent.tt:1 root/base/page/recent.tt:2 root/base/tag/list.tt:22
+msgid "Recent pages in x"
+msgstr "Recent pages in %1"
+
+#. ([page.path, activetag])
+#. ([ page.path, activetag ])
+#: root/base/page/recent.tt:1 root/base/page/recent.tt:4
+msgid "Recent pages in x tagged with x"
+msgstr "Recent pages in %1 tagged with %2"
+
+#: root/base/user/recover_pass.tt:3
+msgid "Recover Password"
+msgstr "패스워드를 재발행"
+
+#: root/base/user/login.tt:13 root/base/user/recover_pass.tt:13
+msgid "Recover password"
+msgstr "패스워드를 재발행"
+
+#: root/base/edithelp.tt:123
+msgid "Rectangle"
+msgstr ""
+
+#: root/base/navbar.tt:29
+msgid "Register"
+msgstr ""
+
+#: root/base/user/login.tt:11
+msgid "Register new account"
+msgstr "신규등록"
+
+#: lib/MojoMojo/Controller/User.pm:209
+msgid "Registration is closed!"
+msgstr "신규등록은 닫혀있습니다"
+
+#: root/base/tag/list.tt:31
+msgid "Related Tags"
+msgstr "관련태그"
+
+#: root/base/page/view.tt:25
+msgid "Removed"
+msgstr ""
+
+#:
+msgid "Restrict user editing to home directory"
+msgstr "홈디렉토리 아래의 편집만 허가"
+
+#: lib/MojoMojo/Controller/Admin.pm:30
+msgid "Restricted area. Admin access required"
+msgstr ""
+
+#: root/base/page/search.tt:46 root/base/page/search_inline.tt:37
+msgid "Result Page"
+msgstr ""
+
+#. ([pager.first, pager.last, pager.total_entries, found_within])
+#. ([ pager.first, pager.last, pager.total_entries, found_within ])
+#: root/base/page/search.tt:22 root/base/page/search_inline.tt:13
+msgid "Results x-x of x found within x"
+msgstr "Results %1-%2 of %3 found within %4"
+
+#. ([content.created.ymd, content.created.hms, content.creator.name])
+#. ([ content.created.ymd, content.created.hms, content.creator.name ])
+#: root/base/page/print.tt:15 root/base/page/view.tt:31
+msgid "Revised on x at x by x"
+msgstr "Revised on %1 at %2 by %3"
+
+#: root/base/page/print.tt:8 root/base/page/view.tt:32 root/base/page/view.tt:5
+msgid "Revision"
+msgstr "리비젼"
+
+#. (page.content.created.datetime)
+#: root/base/page/rss.tt:14
+msgid "Revision from x"
+msgstr "Revision from %1"
+
+#: root/base/toolbar.tt:13
+msgid "Right-justified paragraph"
+msgstr ""
+
+#: root/base/admin/role_form.tt:15
+msgid "Role Members"
+msgstr ""
+
+#: root/forms/admin/role_form.yml:24
+msgid ""
+"Role Name\n"
+" constraints:\n"
+" - Required\n"
+" - type: Checkbox\n"
+" name: active\n"
+" label_loc: \"Active?\"\n"
+" - type: Repeatable\n"
+" increment_field_names: 0\n"
+" elements:\n"
+" - type: Text\n"
+" - name: role_members\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Save\n"
+msgstr ""
+
+#: root/base/admin/role_form.tt:5
+msgid "Role Name:"
+msgstr ""
+
+#: root/base/admin/role.tt:9
+msgid "Roles"
+msgstr ""
+
+#. (page.content_version)
+#: root/base/page/view.tt:7
+msgid "Rolled Back (Current: x)"
+msgstr "Rolled Back (Current: %1)"
+
+#: root/base/admin/role_form.tt:40 root/base/page/edit.tt:55 root/base/page/permissions.tt:48
+msgid "Save"
+msgstr "저장"
+
+#: root/base/page/edit.tt:56
+msgid "Save and View"
+msgstr "저장하고 보기"
+
+#: root/base/navbar.tt:61 root/base/page/search.tt:13 root/base/page/search_inline.tt:3
+msgid "Search"
+msgstr "검색"
+
+#: root/base/page/search.tt:5
+msgid "Search Results"
+msgstr "검색결과"
+
+#: root/base/page/search.tt:14 root/base/page/search_inline.tt:4
+msgid "Search entire site"
+msgstr "전체사이트를 검색"
+
+#: root/base/admin/role_form.tt:18
+msgid "Search for users:"
+msgstr "유저를 검색"
+
+#. (page.path)
+#: root/base/page/search.tt:15 root/base/page/search_inline.tt:5
+msgid "Search within x"
+msgstr "Search within %1"
+
+#: root/base/edithelp.tt:25 root/base/edithelp.tt:29
+msgid "Second item"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:43
+msgid "See changes"
+msgstr "변경부분 보기"
+
+#: root/base/page/bottomnav.tt:28 root/base/page/bottomnav.tt:32
+msgid "See next revision"
+msgstr "다음 리비젼 보기"
+
+#: root/base/page/bottomnav.tt:24 root/base/page/bottomnav.tt:35
+msgid "See previous revision"
+msgstr "이전 리비젼 보기"
+
+#: root/base/page/addtags.tt:1
+msgid "Set a keyword for this page"
+msgstr "이 페이지의 키워드를 설정해주세요"
+
+#: root/base/page/bottomnav.tt:63
+msgid "Set language"
+msgstr "언어"
+
+#: root/base/edithelp.tt:120
+msgid "Shapes"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:43
+msgid "Show differences from previous version"
+msgstr "이전 버젼과의 차이를 보기"
+
+#: root/base/page/bottomnav.tt:46
+msgid "Show normal page"
+msgstr "일반 페이지 보기"
+
+#: root/base/gallery.tt:18
+msgid "Show picture"
+msgstr "그림 보기"
+
+#: root/base/page/info.tt:41
+msgid "Show revision"
+msgstr "리비젼 보기"
+
+#: root/base/edithelp.tt:23
+msgid "Show this product"
+msgstr ""
+
+#: root/base/page/view.tt:24
+msgid "Showing changes from previous revision."
+msgstr "이전 버젼으로부터의 변경내용 표시"
+
+#. ([pager.first, pager.last, pager.total_entries, c.wikiword( page.path, base)
+#. ([ pager.first, pager.last, pager.total_entries, c.wikiword(page.path, base) ])
+#: root/base/pager.tt:16
+msgid "Showing entries x-x of x in x"
+msgstr "「%4」의 %1-%2 페이지중 %3 페이지"
+
+#. ([pager.entries_on_this_page,pager.first,pager.last,pager.total_entries,c.wikiword(page.path,base)
+#. ([ pager.entries_on_this_page, pager.first, pager.last, pager.total_entries, c.wikiword(page.path, base) ])
+#: root/base/gallery/pager.tt:11
+msgid "Showing x (x-x) of x pictures in x"
+msgstr "Showing %1 (%2-%3) of %4 pictures in %5"
+
+#: root/base/edithelp.tt:143
+msgid "Simply indent every line of a code block by 4"
+msgstr ""
+
+#:
+msgid "Site Admins (In addition to you)"
+msgstr "사이트관리자(admin이외)"
+
+#: root/base/admin/settings.tt:5
+msgid "Site Configuration"
+msgstr "사이트 전체 설정"
+
+#:
+msgid "Site name"
+msgstr "사이트 이름"
+
+#: root/forms/admin/settings.yml:33
+msgid ""
+"Site name\n"
+" filters:\n"
+" - HTMLEscape\n"
+" constraints:\n"
+" - Required\n"
+" - type: Text\n"
+" name: admins\n"
+" label_loc: Site Admins (In addition to you)\n"
+" - type: Text\n"
+" name: anonymous_user\n"
+" label_loc: Anonymous User (blank to disable)\n"
+" - type: Checkbox\n"
+" name: open_registration\n"
+" label_loc: New User Registration open\n"
+" value: 1\n"
+" default_empty_value: 0\n"
+" - type: Checkbox\n"
+" name: restricted_user\n"
+" value: 1\n"
+" default_empty_value: 0\n"
+" label_loc: Restrict user editing to home directory\n"
+" - type: Submit\n"
+" name: submit\n"
+" value_loc: Save\n"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:383
+msgid "Some fields are invalid. Please correct them and try again:"
+msgstr "몇가지 필드가 정확하지 않습니다. 수정후 다시 시도해주세요:"
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:123
+msgid "Someone else changed the page while you edited. Your changes has been merged. Please review and save again"
+msgstr "이 페이지를 수정하는 동안에 다른 누군가가 수정했습니다. 당신이 변경한 내용은 통합되었습니다. 다시 리뷰하시고 저장해주세요"
+
+#: root/base/page/bottomnav.tt:13
+msgid "Split Edit"
+msgstr ""
+
+#: root/base/edithelp.tt:122
+msgid "Square"
+msgstr ""
+
+#: root/base/navbar.tt:32 root/base/navbar.tt:34
+msgid "Sub pages"
+msgstr "관련페이지"
+
+#: root/base/navbar.tt:52 root/base/navbar.tt:54
+msgid "Subscribe to changes by RSS"
+msgstr ""
+
+#: root/base/page/bottomnav.tt:51
+msgid "Subscribe to page changes"
+msgstr ""
+
+#: root/base/page/attachments.tt:5
+msgid "Switch to flash uploader"
+msgstr ""
+
+#: root/base/page/editbar.tt:20 root/base/page/editbar.tt:8
+msgid "Syntax"
+msgstr "구문"
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:133
+msgid "THEIR CHANGES"
+msgstr "변경"
+
+#: root/base/edithelp.tt:35
+msgid "Table"
+msgstr "테이블"
+
+#: root/base/navbar.tt:40 root/base/navbar.tt:43 root/base/navbar.tt:45 root/base/page/list.tt:6 root/base/page/recent.tt:13 root/base/tag/recent.tt:7
+msgid "Tags"
+msgstr "태그"
+
+#. (page.name)
+#: root/base/tag/cloud.tt:1
+msgid "Tags under x"
+msgstr "%1이하의 태그"
+
+#: root/base/gallery/photo_info.tt:4
+msgid "Taken"
+msgstr ""
+
+#: root/base/edithelp.tt:58
+msgid "Text Formatting"
+msgstr ""
+
+#: root/base/edithelp.tt:59 root/base/edithelp.tt:60
+msgid "Text in"
+msgstr ""
+
+#: root/base/edithelp.tt:3
+msgid "Textile formatting tips"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:299
+msgid "That mail is already in use"
+msgstr ""
+
+#: root/base/navbar.tt:68
+msgid "The Wikilicious page"
+msgstr ""
+
+#. (user.email)
+#: root/base/user/validate.tt:16
+msgid "The email was sent to x."
+msgstr "%1에게 메일을 보냈습니다."
+
+#. ($c->stash->{pre_hacked_uri})
+#: lib/MojoMojo/Controller/Root.pm:46
+msgid "The requested URL (x) was not found"
+msgstr "요청받은 URL(%1) 을 찾지 못했습니다"
+
+#: root/base/edithelp.tt:147
+msgid "This is a pre formatted code block"
+msgstr "이것은 미리 정해진 코드블록입니다"
+
+#: lib/MojoMojo/Controller/Jsrpc.pm:93
+msgid "This is the first revision! Nothing to diff against."
+msgstr "첫번째 리비젼에는 차이점이 없습니다"
+
+#: root/base/page/recent.tt:40
+msgid "Time edited"
+msgstr "편집된 시간"
+
+#: root/base/edithelp.tt:104 root/base/edithelp.tt:92
+msgid "To get"
+msgstr ""
+
+#: root/base/page/edit.tt:21
+msgid "To start editing this page, write in the text area below this preview. To find out what kind of codes you can use click the syntax link above."
+msgstr ""
+
+#: root/base/edithelp.tt:49 root/base/edithelp.tt:7
+msgid "Two or more uppercase words stuck together (camel case) or any phrase surrounded by double brackets or parenthesis is a wiki word. A camel-case wiki word can be escaped by putting \\ in front of it."
+msgstr ""
+
+#: root/base/edithelp.tt:33
+msgid "URL"
+msgstr ""
+
+#: root/base/edithelp.tt:102
+msgid "Unordered Lists with Paragraphs"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:130
+msgid "Updated preferences"
+msgstr ""
+
+#: lib/MojoMojo/Controller/Admin.pm:95
+msgid "Updated successfully."
+msgstr "성공적으로 업데이트되었습니다"
+
+#: root/base/page/attachments.tt:11
+msgid "Upload"
+msgstr ""
+
+#: root/base/page/permissions.tt:52
+msgid "Use inherited permissions"
+msgstr ""
+
+#: root/base/navbar.tt:23
+msgid "User Preferences"
+msgstr "유저 설정"
+
+#: root/base/navbar.tt:83
+msgid "User Profile"
+msgstr "유저 프로파일"
+
+#: root/base/navbar.tt:90
+msgid "User Settings"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:360
+msgid "User not found!"
+msgstr "유저를 찾을 수 없습니다"
+
+#. ($login)
+#: lib/MojoMojo/Controller/User.pm:332
+msgid "User x not found!"
+msgstr "유저 %1 를 찾을 수 없습니다"
+
+#: root/base/user/login.tt:17 root/base/user/recover_pass.tt:10
+msgid "Username"
+msgstr "유저이름"
+
+#: root/base/admin/user.tt:5
+msgid "Users"
+msgstr "유저"
+
+#: root/base/user/validate.tt:11
+msgid "Validation"
+msgstr "확인"
+
+#: root/base/page/recent.tt:55
+msgid "View Diff"
+msgstr "차이를 보기"
+
+#: root/base/gallery.tt:23
+msgid "View as files"
+msgstr "파일 형식"
+
+#: root/base/page/attachments.tt:24
+msgid "View as gallery"
+msgstr "갤러리 형식"
+
+#: root/base/page/bottomnav.tt:50
+msgid "Views"
+msgstr "표시"
+
+#: root/base/page/list.tt:37
+msgid "Wanted Pages"
+msgstr "완전히 작성되지 않은 페이지"
+
+#: root/base/user/validate.tt:13
+msgid "We've sent you an email with an activation link. Please click on it to activate your account!"
+msgstr "인증코드를 담은 링크를 넣은 메일을 보냈습니다. 메일에 기재된 링크를 클릭해서 계정을 활성화시켜주세요"
+
+#. ($user->name)
+#: lib/MojoMojo/Controller/User.pm:279
+msgid "Welcome, x your email is validated. Please log in."
+msgstr " %1 당신의 이메일은 사용가능합니다. 로그인해주세요."
+
+#: root/base/navbar.tt:48 root/base/navbar.tt:50
+msgid "Who wrote what"
+msgstr ""
+
+#: root/base/edithelp.tt:10 root/base/edithelp.tt:47 root/base/edithelp.tt:5 root/base/edithelp.tt:52
+msgid "Wiki words"
+msgstr ""
+
+#: root/base/edithelp.tt:118
+msgid "With a second line"
+msgstr ""
+
+#: root/base/edithelp.tt:109 root/base/edithelp.tt:97
+msgid "Write"
+msgstr ""
+
+#: lib/MojoMojo/Controller/PageAdmin.pm:134
+msgid "YOUR CHANGES"
+msgstr ""
+
+#: root/base/admin/role.tt:22
+msgid "Yes"
+msgstr ""
+
+#: root/base/export.tt:3
+msgid "You can export all the pages in this web as a zip file in either HTML (with working links and all) or the pure markup (to import in another wiki)."
+msgstr ""
+
+#: root/base/feeds.tt:3
+msgid "You can subscribe to this wiki by RSS and get either just the headlines of the pages that change or the entire page."
+msgstr "이 Wiki 의 변경사항을 RSS 경유로 구독할 수 있습니다. 편집된 페이지의 다이렉트만이 필요한 경우는 [헤드라인]을, 전체문장이 필요할 경우는 [전체문장]을 클릭해주세요."
+
+#: lib/MojoMojo/Controller/Attachment.pm:38
+msgid "You do not have permissions to edit attachments for this page"
+msgstr "이 페이지를 편집할 수 있는 권한이 없습니다."
+
+#: lib/MojoMojo/Controller/User.pm:377
+msgid "You have to fill in all required fields."
+msgstr "필수항목을 채워주세요."
+
+#: root/base/comment/login.tt:3
+msgid "You have to log in to post a comment."
+msgstr "코멘트를 쓰기위해서는 로그인해야 합니다."
+
+#: root/base/user/prefs.tt:3
+msgid "Your Account"
+msgstr "계정 정보"
+
+#: lib/MojoMojo/Controller/Jsrpc.pm:40
+msgid "Your input is invalid, please reformat it and try again."
+msgstr "잘못입력하셨습니다. 바르게 입력해주세요."
+
+#: lib/MojoMojo/Controller/User.pm:159
+msgid "Your password has been updated"
+msgstr "패스워드가 바뀌었습니다."
+
+#. (c.config.name)
+#: root/base/mail/reset_password.tt:3
+msgid "Your password on x has been reset. This is your new password:"
+msgstr "당신의 패스워드 %1 가 리셋되었습니다. 새로운 패스워드:"
+
+#. ($c->pref('name')
+#: lib/MojoMojo/Controller/User.pm:247
+msgid "[x] New User Validation"
+msgstr "[%1] New User Validation"
+
+#: root/base/page/permissions.tt:36
+msgid "actions"
+msgstr ""
+
+#: root/base/gallery/footer.tt:7
+msgid "add"
+msgstr ""
+
+#: root/base/comment.tt:23
+msgid "add a comment"
+msgstr "코멘트 등록"
+
+#: root/base/gallery/footer.tt:2
+msgid "add tag"
+msgstr "태그 등록"
+
+#: root/base/edithelp.tt:3 root/base/edithelp.tt:45
+msgid "advanced"
+msgstr ""
+
+#: root/base/edithelp.tt:67
+msgid "alt text"
+msgstr ""
+
+#: root/base/page/permissions.tt:36
+msgid "apply to subpages"
+msgstr ""
+
+#. (c.wikiword(user.link,base)
+#. (c.wikiword(user.link, base))
+#: root/base/comment/post.tt:5
+msgid "as x"
+msgstr "as %1"
+
+#: root/base/page/view.tt:5 root/base/tag/recent.tt:27
+msgid "at"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:13
+msgid "back"
+msgstr ""
+
+#: root/base/edithelp.tt:138
+msgid "blocks are wrapped in backticks"
+msgstr ""
+
+#: root/base/edithelp.tt:60 root/base/toolbar.tt:18 root/base/toolbar.tt:40
+msgid "bold"
+msgstr ""
+
+#: root/base/page/search.tt:35 root/base/page/search_inline.tt:27 root/base/page/view.tt:32 root/base/tag/recent.tt:26
+msgid "by"
+msgstr ""
+
+#: root/base/page/info.tt:31
+msgid "bytes"
+msgstr ""
+
+#: root/base/page/permissions.tt:20
+msgid "can"
+msgstr ""
+
+#: root/base/toolbar.tt:14
+msgid "centered paragraph"
+msgstr ""
+
+#: root/base/page/info.tt:16
+msgid "chars"
+msgstr ""
+
+#: root/base/edithelp.tt:138
+msgid "code"
+msgstr ""
+
+#: root/base/comment.tt:13
+msgid "comment"
+msgstr ""
+
+#: root/base/comment.tt:2
+msgid "comments disabled for preview"
+msgstr "미리보기에서는 커멘트를 표시하지 않습니다"
+
+#: root/base/tag/list.tt:32
+msgid "common uses"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:10
+msgid "configuration"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:307
+msgid "confirmation message resent"
+msgstr "최근 메시지를 확인"
+
+#:
+msgid "creator"
+msgstr "작성자"
+
+#: root/base/attachments/list.tt:9
+msgid "delete"
+msgstr "삭제"
+
+#: root/base/toolbar.tt:22 root/base/toolbar.tt:44
+msgid "deleted"
+msgstr ""
+
+#: root/base/message.tt:6
+msgid "do not pass prison, do not collect $ 200..."
+msgstr ""
+
+#: root/base/attachments/list.tt:7
+msgid "download"
+msgstr "다운로드"
+
+#: root/base/admin/user.tt:8
+msgid "email"
+msgstr "이메일"
+
+#: root/base/page/search.tt:21 root/base/page/search_inline.tt:12
+msgid "entire site"
+msgstr ""
+
+#: root/base/edithelp.tt:62 root/base/edithelp.tt:63
+msgid "example"
+msgstr ""
+
+#: root/base/comment/post.tt:6 root/base/page/edit.tt:60
+msgid "forget me"
+msgstr ""
+
+#: root/base/gallery/photo.tt:7 root/base/navbar.tt:74
+msgid "gallery"
+msgstr "갤러리 형식"
+
+#: root/base/edithelp.tt:22
+msgid "hello"
+msgstr ""
+
+#: root/base/edithelp.tt:62 root/base/edithelp.tt:63
+msgid "http://example.com/"
+msgstr ""
+
+#: root/base/edithelp.tt:140
+msgid "in the wrapping block"
+msgstr ""
+
+#: root/base/edithelp.tt:17
+msgid "include this page"
+msgstr ""
+
+#: root/base/edithelp.tt:20
+msgid "include this rss feed"
+msgstr ""
+
+#: root/base/toolbar.tt:32
+msgid "increase # for smaller headline"
+msgstr ""
+
+#:
+msgid "inline"
+msgstr "인라인으로 표시"
+
+#: root/base/attachments/list.tt:6
+msgid "inline view"
+msgstr ""
+
+#:
+msgid "insert"
+msgstr "삽입"
+
+#: root/base/attachments/list.tt:8
+msgid "insert link"
+msgstr "링크를 삽입"
+
+#: root/base/toolbar.tt:20 root/base/toolbar.tt:42
+msgid "italic"
+msgstr "이탤릭"
+
+#: root/base/edithelp.tt:59
+msgid "italics"
+msgstr "이탤릭"
+
+#: root/base/edithelp.tt:140
+msgid "just use `2`"
+msgstr ""
+
+#: root/base/toolbar.tt:16
+msgid "justified paragraph"
+msgstr ""
+
+#: root/base/toolbar.tt:10
+msgid "left justified paragraph"
+msgstr ""
+
+#: root/base/edithelp.tt:33
+msgid "linkname"
+msgstr ""
+
+#: root/base/comment/login.tt:12
+msgid "log in"
+msgstr "로그인"
+
+#: root/base/user/validate.tt:31
+msgid "log out"
+msgstr "로그아웃"
+
+#: root/base/admin/user.tt:8 root/base/comment/login.tt:8
+msgid "login"
+msgstr "로그인"
+
+#: root/base/gallery/tags.tt:2
+msgid "my tags"
+msgstr "나의 태그"
+
+#: root/base/admin/user.tt:8
+msgid "name"
+msgstr "이름"
+
+#: root/base/gallery/photo.tt:35
+msgid "no description"
+msgstr ""
+
+#: root/base/admin/user.tt:19
+msgid "no email address"
+msgstr "이메일이 없습니다"
+
+#: root/base/page/permissions.tt:20
+msgid "not access page"
+msgstr ""
+
+#: root/base/gallery/photo_info.tt:4 root/base/gallery/photo_info.tt:5 root/base/gallery/photo_info.tt:6 root/base/gallery/photo_info.tt:8
+msgid "not specified"
+msgstr ""
+
+#: root/base/page/search.tt:36 root/base/page/search_inline.tt:28
+msgid "on"
+msgstr ""
+
+#: root/base/edithelp.tt:154
+msgid "or"
+msgstr ""
+
+#: root/base/page/info.tt:25 root/base/page/info.tt:28
+msgid "pages"
+msgstr "페이지"
+
+#: root/base/comment/login.tt:10
+msgid "password"
+msgstr "패스워드"
+
+#: root/base/gallery/cloud.tt:2
+msgid "photo tags"
+msgstr ""
+
+#: root/base/page/attachments.tt:16
+msgid "plain uploader"
+msgstr "심플 다운로더"
+
+#: root/base/gallery/tags.tt:17
+msgid "popular tags"
+msgstr "인기 태그"
+
+#: root/base/comment.tt:11
+msgid "posted"
+msgstr ""
+
+#: root/base/comment.tt:9
+msgid "poster"
+msgstr ""
+
+#: root/base/user/prefs.tt:1
+msgid "preferences"
+msgstr ""
+
+#: root/base/page/permissions.tt:13 root/base/page/permissions.tt:16 root/base/page/permissions.tt:36
+msgid "read"
+msgstr "읽기"
+
+#. (wanted.from_page.path)
+#: root/base/page/list.tt:43
+msgid "referenced by x"
+msgstr "referenced by %1"
+
+#: root/base/comment/login.tt:4
+msgid "register"
+msgstr ""
+
+#: root/base/admin/role_form.tt:31
+msgid "remove"
+msgstr "삭제"
+
+#: root/base/page/bottomnav.tt:25
+msgid "revision"
+msgstr "리비젼"
+
+#: root/base/toolbar.tt:12
+msgid "right justified paragraph"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:12
+msgid "roles"
+msgstr ""
+
+#: root/base/message.tt:4
+msgid "shrinked head"
+msgstr ""
+
+#: root/base/message.tt:6
+msgid "start"
+msgstr ""
+
+#: root/base/tag/list.tt:9
+msgid "tags"
+msgstr ""
+
+#: lib/MojoMojo/Controller/User.pm:378
+msgid "the following are missing:"
+msgstr ""
+
+#: root/base/toolbar.tt:48
+msgid "url inside paranthesis"
+msgstr ""
+
+#: root/base/admin/toplinks.tt:11
+msgid "users"
+msgstr ""
+
+#: root/base/attachments/list.tt:5
+msgid "view"
+msgstr "보기"
+
+#. ("test")
+#: lib/MojoMojo/Schema.pm:131
+msgid "welcome message"
+msgstr ""
+"h1. MojoMojo에 오신 것을 환경합니다!\n"
+"\n"
+"이것이 보인다는 것은 무사히 MojoMojo의 인스톨이 끝났다는 것을 의미합니다.\n"
+"MojoMojo를 사용하기위해서는 우선 유저이름 「admin」 과 패스워드 「admin」 을 사용해서\n"
+"관리자로 로그인해주세요. 로그인하면 MojoMojo 의 관리가 가능해집니다.\n"
+"\n"
+"로그인을 했다면 처음으로 [[New Page]]에서 페이지를 새롭게 만들거나, 이 페이지의 위에 있는\n"
+"편집 링크에서 이 페이지를 편집할 수 있습니다.\n"
+"\n"
+"모르는 것이 있다면 [[Help]] 를 참고해주세요."
+
+#: root/base/page/permissions.tt:13 root/base/page/permissions.tt:17 root/base/page/permissions.tt:36
+msgid "write"
+msgstr "쓰기"
+
+#:
+msgid "x hits"
+msgstr "%1 hits"
+
+#. (page.content.max_version - page.content_version)
+#. (page.content.max_version - rev)
+#. (rev - 1)
+#: root/base/page/bottomnav.tt:28 root/base/page/bottomnav.tt:32 root/base/page/bottomnav.tt:35
+msgid "x more"
+msgstr "%1 more"
+
+#. (page.versions.size)
+#: root/base/page/info.tt:37
+msgid "x revisions"
+msgstr "%1 revisions"
+
+#: root/base/page/permissions.tt:13 root/base/page/permissions.tt:16 root/base/page/permissions.tt:17
+msgid "yes"
+msgstr ""
+
+#: root/base/edithelp.tt:16 root/base/edithelp.tt:19
+msgid "your text"
+msgstr ""
+
+#: root/base/edithelp.tt:17 root/base/edithelp.tt:20
+msgid "your/url"
+msgstr ""
+
+#: root/base/edithelp.tt:35
+msgid "|a|table|row|"
+msgstr ""
+
+#: root/base/edithelp.tt:35
+msgid "|b|table|row|"
+msgstr ""
@@ -6,11 +6,16 @@ use Carp qw/croak/;
use parent qw/MojoMojo::Schema::Base::Result/;
-__PACKAGE__->load_components( "Core" );
+__PACKAGE__->load_components("Core");
__PACKAGE__->table("page");
__PACKAGE__->add_columns(
"id",
- { data_type => "INTEGER", is_nullable => 0, size => undef, is_auto_increment => 1 },
+ {
+ data_type => "INTEGER",
+ is_nullable => 0,
+ size => undef,
+ is_auto_increment => 1
+ },
"version",
{ data_type => "INTEGER", is_nullable => 1, size => undef },
"parent",
@@ -29,20 +34,75 @@ __PACKAGE__->add_columns(
{ data_type => "INTEGER", is_nullable => 1, size => undef },
);
__PACKAGE__->set_primary_key("id");
-__PACKAGE__->add_unique_constraint( "page_unique_child_index", [ "parent", "name" ] );
-__PACKAGE__->has_many( "wantedpages", "MojoMojo::Schema::Result::WantedPage", { "foreign.from_page" => "self.id" } );
-__PACKAGE__->belongs_to( "parent", "MojoMojo::Schema::Result::Page", { id => "parent" } );
-__PACKAGE__->has_many( "children", "MojoMojo::Schema::Result::Page", { "foreign.parent" => "self.id" } );
-__PACKAGE__->belongs_to( "content", "MojoMojo::Schema::Result::Content", { page => "id", version => "content_version" } );
-__PACKAGE__->has_many( "versions", "MojoMojo::Schema::Result::Content", { "foreign.page" => "self.id" }, { order_by => 'version desc' } );
-__PACKAGE__->belongs_to( "page_version", "MojoMojo::Schema::Result::PageVersion", { page => "id", version => "version" } );
-__PACKAGE__->has_many( "tags", "MojoMojo::Schema::Result::Tag", { "foreign.page" => "self.id" } );
-__PACKAGE__->has_many( "links_from", "MojoMojo::Schema::Result::Link", { "foreign.from_page" => "self.id" } );
-__PACKAGE__->has_many( "links_to", "MojoMojo::Schema::Result::Link", { "foreign.to_page" => "self.id" } );
-__PACKAGE__->has_many( "roleprivileges", "MojoMojo::Schema::Result::RolePrivilege", { "foreign.page" => "self.id" } );
-__PACKAGE__->has_many( "attachments", "MojoMojo::Schema::Result::Attachment", { "foreign.page" => "self.id" }, {order_by=>'name asc' } );
-__PACKAGE__->has_many( "comments", "MojoMojo::Schema::Result::Comment", { "foreign.page" => "self.id" } );
-__PACKAGE__->has_many( "journals", "MojoMojo::Schema::Result::Journal", { "foreign.pageid" => "self.id" } );
+__PACKAGE__->add_unique_constraint( "page_unique_child_index",
+ [ "parent", "name" ] );
+__PACKAGE__->has_many(
+ "wantedpages",
+ "MojoMojo::Schema::Result::WantedPage",
+ { "foreign.from_page" => "self.id" }
+);
+__PACKAGE__->belongs_to(
+ "parent",
+ "MojoMojo::Schema::Result::Page",
+ { id => "parent" }
+);
+__PACKAGE__->has_many(
+ "children",
+ "MojoMojo::Schema::Result::Page",
+ { "foreign.parent" => "self.id" }
+);
+__PACKAGE__->belongs_to(
+ "content",
+ "MojoMojo::Schema::Result::Content",
+ { page => "id", version => "content_version" }
+);
+__PACKAGE__->has_many(
+ "versions",
+ "MojoMojo::Schema::Result::Content",
+ { "foreign.page" => "self.id" },
+ { order_by => 'version desc' }
+);
+__PACKAGE__->belongs_to(
+ "page_version",
+ "MojoMojo::Schema::Result::PageVersion",
+ { page => "id", version => "version" }
+);
+__PACKAGE__->has_many(
+ "tags",
+ "MojoMojo::Schema::Result::Tag",
+ { "foreign.page" => "self.id" }
+);
+__PACKAGE__->has_many(
+ "links_from",
+ "MojoMojo::Schema::Result::Link",
+ { "foreign.from_page" => "self.id" }
+);
+__PACKAGE__->has_many(
+ "links_to",
+ "MojoMojo::Schema::Result::Link",
+ { "foreign.to_page" => "self.id" }
+);
+__PACKAGE__->has_many(
+ "roleprivileges",
+ "MojoMojo::Schema::Result::RolePrivilege",
+ { "foreign.page" => "self.id" }
+);
+__PACKAGE__->has_many(
+ "attachments",
+ "MojoMojo::Schema::Result::Attachment",
+ { "foreign.page" => "self.id" },
+ { order_by => 'name asc' }
+);
+__PACKAGE__->has_many(
+ "comments",
+ "MojoMojo::Schema::Result::Comment",
+ { "foreign.page" => "self.id" }
+);
+__PACKAGE__->has_many(
+ "journals",
+ "MojoMojo::Schema::Result::Journal",
+ { "foreign.pageid" => "self.id" }
+);
=head1 NAME
@@ -73,17 +133,21 @@ sub update_content {
: undef
);
my %content_data =
- map { $_ => $args{$_} } $self->result_source->related_source('content')->columns;
+ map { $_ => $args{$_} }
+ $self->result_source->related_source('content')->columns;
my $now = DateTime->now;
- @content_data{qw/page version status release_date/} =
- ( $self->id, ( $content_version ? $content_version + 1 : 1 ), 'released', $now, );
+ @content_data{qw/page version status release_date/} = (
+ $self->id, ( $content_version ? $content_version + 1 : 1 ),
+ 'released', $now,
+ );
my $content =
- $self->result_source->related_source('content')->resultset->create( \%content_data );
+ $self->result_source->related_source('content')
+ ->resultset->create( \%content_data );
$self->content_version( $content->version );
$self->update;
-
+
$self->page_version->content_version_first($content_version)
- unless defined $self->page_version->content_version_first;
+ unless defined $self->page_version->content_version_first;
$self->page_version->content_version_last($content_version);
$self->page_version->update;
@@ -96,15 +160,18 @@ sub update_content {
else {
$self->result_source->resultset->set_paths($self);
}
- foreach my $want_me ($self->result_source->schema->resultset('WantedPage')
- ->search( { to_path => $self->path } ) ) {
+ foreach my $want_me ( $self->result_source->schema->resultset('WantedPage')
+ ->search( { to_path => $self->path } ) )
+ {
my $wantme_page = $want_me->from_page;
# convert the wanted into links
- $self->result_source->schema->resultset('Link')->create({
- from_page => $wantme_page,
- to_page => $self,
- });
+ $self->result_source->schema->resultset('Link')->create(
+ {
+ from_page => $wantme_page,
+ to_page => $self,
+ }
+ );
# clear the precompiled (will be recompiled on view)
if ( my $wantme_content = $wantme_page->content ) {
@@ -143,37 +210,46 @@ sub add_version {
my $now = DateTime->now;
my $page_version_last = $self->page_version->latest_version();
-
+
# clone the last version and update fields passed in %args
my %page_version_data = map {
exists $args{$_}
- ? ( $_ => $args{$_} )
- : ( $_ => $page_version_last->$_ )
+ ? ( $_ => $args{$_} )
+ : ( $_ => $page_version_last->$_ )
} $self->result_source->related_source('page_version')->columns;
-
- delete $args{creator}; # creator is a field in page_version, not in page
+
+ delete $args{creator}; # creator is a field in page_version, not in page
# for the new version, set the version number, status, and release date
- @page_version_data{qw/
- version status release_date/} =
- ( $page_version_last->version + 1, 'released', $now );
+ @page_version_data{
+ qw/
+ version status release_date/
+ }
+ = ( $page_version_last->version + 1, 'released', $now );
my $page_version_new;
- # commit the new version to the database and update the previously last version to indicate its removal
- $self->result_source->schema->txn_do(sub {
-
- $page_version_new =
- $self->result_source->related_source('page_version')->resultset->create( \%page_version_data );
-
- $page_version_last->update({
- remove_date => $now,
- status => 'removed',
- comments => 'Replaced by version ' . $page_version_data{version}
- });
-
- $self->update(\%args);
- });
-
+
+# commit the new version to the database and update the previously last version to indicate its removal
+ $self->result_source->schema->txn_do(
+ sub {
+
+ $page_version_new =
+ $self->result_source->related_source('page_version')
+ ->resultset->create( \%page_version_data );
+
+ $page_version_last->update(
+ {
+ remove_date => $now,
+ status => 'removed',
+ comments => 'Replaced by version '
+ . $page_version_data{version}
+ }
+ );
+
+ $self->update( \%args );
+ }
+ );
+
return $page_version_new;
}
@@ -191,7 +267,8 @@ sub tagged_descendants {
'tag' => $tag,
-or => [
'me.id' => \'=ancestor.id',
- -and => [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
+ -and =>
+ [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
],
'me.id' => \'=tag.page',
@@ -222,13 +299,21 @@ sub tagged_descendants_by_date {
'tag' => $tag,
-or => [
'me.id' => \'=ancestor.id',
- -and => [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
+ -and =>
+ [ 'me.lft', \'> ancestor.lft', 'me.rgt', \'< ancestor.rgt', ],
],
'me.id' => \'=tag.page',
'content.page' => \'=me.id',
'content.version' => \'=me.content_version',
},
{
+ columns => [
+ 'me.id', 'me.version',
+ 'me.parent', 'me.name',
+ 'me.name_orig', 'me.depth',
+ 'me.lft', 'me.rgt',
+ 'me.content_version', 'content.created'
+ ],
distinct => 1,
from => "page as me, page as ancestor, tag, content",
order_by => 'content.created DESC',
@@ -237,8 +322,6 @@ sub tagged_descendants_by_date {
return $self->result_source->resultset->set_paths(@pages);
}
-
-
=head2 descendants
@descendants = $page->descendants( [$resultset_page] );
@@ -252,8 +335,8 @@ L<resultset|DBIx::Class::ResultSet>.
=cut
sub descendants {
- my ($self, $resultset_page) = @_;
-
+ my ( $self, $resultset_page ) = @_;
+
my $rs = $self->result_source->resultset->search(
{
'ancestor.id' => $self->id,
@@ -266,18 +349,18 @@ sub descendants {
],
},
{
- $resultset_page? (page => $resultset_page || 1, rows => 20) : (),
+ $resultset_page ? ( page => $resultset_page || 1, rows => 20 ) : (),
from => 'page me, page ancestor',
order_by => ['me.name']
}
- ); # an empty arrayref if there are no results because we'll dereference in the 'return'
+ )
+ ; # an empty arrayref if there are no results because we'll dereference in the 'return'
- return wantarray?
- $self->result_source->resultset->set_paths($rs->all)
- : $rs
+ return wantarray
+ ? $self->result_source->resultset->set_paths( $rs->all )
+ : $rs;
}
-
=head2 descendants_by_date
@descendants = $page->descendants_by_date;
@@ -312,7 +395,6 @@ sub descendants_by_date {
return $self->result_source->resultset->set_paths(@pages);
}
-
=head2 user_tags($user)
Return popular tags for this page used C<$user>.
@@ -321,18 +403,19 @@ Return popular tags for this page used C<$user>.
sub user_tags {
my ( $self, $user ) = @_;
- my (@tags) = $self->result_source->related_source('tags')->resultset->search(
+ my (@tags) =
+ $self->result_source->related_source('tags')->resultset->search(
{
page => $self->id,
person => $user,
},
{
- select => [ 'me.id', 'me.tag', 'count(me.tag) as refcount' ],
- as => [ 'id', 'tag', 'refcount' ],
+ select => [ 'me.tag', 'count(me.tag) as refcount' ],
+ as => [ 'tag', 'refcount' ],
order_by => ['refcount'],
- group_by => [ 'me.id','me.tag'],
+ group_by => ['me.tag'],
}
- );
+ );
return @tags;
}
@@ -344,18 +427,19 @@ Return popular tags for this page used by other people than C<$user>.
sub others_tags {
my ( $self, $user ) = @_;
- my (@tags) = $self->result_source->related_source('tags')->resultset->search(
+ my (@tags) =
+ $self->result_source->related_source('tags')->resultset->search(
{
page => $self->id,
person => { '!=', $user }
},
{
- select => [ 'me.id', 'me.tag', 'count(me.tag) as refcount' ],
- as => [ 'id', 'tag', 'refcount' ],
+ select => [ 'me.tag', 'count(me.tag) as refcount' ],
+ as => [ 'tag', 'refcount' ],
order_by => ['refcount'],
- group_by => ['me.tag','me.id'],
+ group_by => ['me.tag'],
}
- );
+ );
return @tags;
}
@@ -367,15 +451,16 @@ Return an array of {id, tag, refcount} for the C<$user>'s tags.
sub tags_with_counts {
my ( $self, $user ) = @_;
- my (@tags) = $self->result_source->related_source('tags')->resultset->search(
+ my (@tags) =
+ $self->result_source->related_source('tags')->resultset->search(
{ page => $self->id, },
{
- select => [ 'me.id', 'me.tag', 'count(me.tag) as refcount' ],
- as => [ 'id', 'tag', 'refcount' ],
+ select => [ 'me.tag', 'count(me.tag) as refcount' ],
+ as => [ 'tag', 'refcount' ],
order_by => ['refcount'],
- group_by => [ 'me.id', 'me.tag'],
+ group_by => ['me.tag'],
}
- );
+ );
return @tags;
}
@@ -408,10 +493,9 @@ Return the number of photos attached to this page. Use for galleries.
sub has_photos {
my $self = shift;
- return $self->result_source->schema->resultset('Photo')->search(
- { 'attachment.page' => $self->id },
- { join => [qw/attachment/] }
- )->count;
+ return $self->result_source->schema->resultset('Photo')
+ ->search( { 'attachment.page' => $self->id },
+ { join => [qw/attachment/] } )->count;
}
=head1 AUTHOR
@@ -30,7 +30,7 @@ use Module::Pluggable::Ordered
except => qr/^MojoMojo::Plugin::/,
require => 1;
-our $VERSION = '1.02';
+our $VERSION = '1.03';
use 5.008004;
MojoMojo->config->{authentication}{dbic} = {
@@ -0,0 +1,85 @@
+#!/usr/bin/env perl
+=head1 NAME
+
+bust_cache.pl - Delete the precompiled content of a page. MojoMojo
+will recompile the page next time it is requested.
+
+=head1 SYNOPSIS
+
+ script/util/bust_cache.pl /path/to/page
+
+=head1 AUTHORS
+
+Dan Dascalescu (dandv), http://dandascalescu.com
+
+=head1 LICENSE
+
+You may distribute this code under the same terms as Perl itself.
+
+=head1 COPYRIGHT
+
+Copyright (C) 2010, Dan Dascalescu.
+
+=cut
+
+use strict;
+use warnings;
+use FindBin;
+use lib "$FindBin::Bin/../../lib";
+use MojoMojo::Schema;
+
+my ($page_path, $filename_content, $dsn, $user, $pass) = @ARGV;
+
+if (!$page_path) {
+ die "USAGE: $0 /path/to/page [dsn user pass]
+Delete the precompiled content of a page. MojoMojo
+will recompile the page next time it is requested.
+\n";
+}
+
+if (!$dsn) {
+ # no DSN passed via the command line; attempting to read one from the config file
+ require Config::JFDI;
+
+ my $config = Config::JFDI->new(name => "MojoMojo")->get;
+ die "Couldn't read config file" if not keys %{$config};
+
+ eval {
+ if (ref $config->{'Model::DBIC'}->{'connect_info'} eq 'HASH') {
+ $dsn = $config->{'Model::DBIC'}->{'connect_info'}->{dsn};
+ $user = $config->{'Model::DBIC'}->{'connect_info'}->{user};
+ $pass = $config->{'Model::DBIC'}->{'connect_info'}->{password};
+ } else {
+ ($dsn, $user, $pass) = @{$config->{'Model::DBIC'}->{connect_info}};
+ }
+ };
+ die "Your DSN settings in mojomojo.conf seem invalid: $@\n" if $@;
+}
+die "Couldn't find a valid Data Source Name (DSN).\n" if !$dsn;
+
+$dsn =~ s/__HOME__/$FindBin::Bin\/\.\./g;
+
+my $schema = MojoMojo::Schema->connect($dsn, $user, $pass) or
+ die "Failed to connect to database";
+
+my ( $path_pages, $proto_pages ) = $schema->resultset('Page')->path_pages( $page_path )
+ or die "Can't find page $page_path\n";
+
+if (scalar @$proto_pages) {
+ die "One or more pages at the end do(es) not exist: ",
+ (join ", ", map { $_->{name_orig} } @$proto_pages),
+ "\n";
+}
+
+# Get the lastest content version of the page
+my $page = $path_pages->[-1];
+my $page_content = $schema->resultset('Content')->single(
+ {
+ page => $page->id,
+ version => $page->content_version,
+ }
+);
+
+$page_content->update({
+ precompiled => ''
+});
@@ -30,7 +30,7 @@ use MojoMojo::Schema;
my ($page_path, $filename_content, $dsn, $user, $pass) = @ARGV;
if (!$page_path) {
- die "USAGE: $0 /path/to/page
+ die "USAGE: $0 /path/to/page [dsn user pass]
Dump the raw (markup) contents of the last version of a page.
\n";
}
@@ -43,7 +43,7 @@ if (!$dsn) {
die "Couldn't read config file" if not keys %{$config};
eval {
- if (ref $config->{'Model::DBIC'}->{'connect_info'}) {
+ if (ref $config->{'Model::DBIC'}->{'connect_info'} eq 'HASH') {
$dsn = $config->{'Model::DBIC'}->{'connect_info'}->{dsn};
$user = $config->{'Model::DBIC'}->{'connect_info'}->{user};
$pass = $config->{'Model::DBIC'}->{'connect_info'}->{password};
@@ -51,7 +51,7 @@ if (!$dsn) {
($dsn, $user, $pass) = @{$config->{'Model::DBIC'}->{connect_info}};
}
};
- die "Your DSN settings in mojomojo.conf seem invalid\n" if $@;
+ die "Your DSN settings in mojomojo.conf seem invalid: $@\n" if $@;
}
die "Couldn't find a valid Data Source Name (DSN).\n" if !$dsn;
@@ -76,7 +76,7 @@ my ($page_path, $filename_content, $dsn, $user, $pass) = @ARGV;
if (!$page_path) {
die "USAGE: $0 /path/to/page filename [dsn user pass]
-Replace the contents of the last version of a page with the content from a file
+Replace the contents of the last version of a page with the content from a file.
\n";
}
@@ -88,7 +88,7 @@ if (!$dsn) {
die "Couldn't read config file" if not keys %{$config};
eval {
- if (ref $config->{'Model::DBIC'}->{'connect_info'}) {
+ if (ref $config->{'Model::DBIC'}->{'connect_info'} eq 'HASH') {
$dsn = $config->{'Model::DBIC'}->{'connect_info'}->{dsn};
$user = $config->{'Model::DBIC'}->{'connect_info'}->{user};
$pass = $config->{'Model::DBIC'}->{'connect_info'}->{password};
@@ -96,7 +96,7 @@ if (!$dsn) {
($dsn, $user, $pass) = @{$config->{'Model::DBIC'}->{connect_info}};
}
};
- die "Your DSN settings in mojomojo.conf seem invalid\n" if $@;
+ die "Your DSN settings in mojomojo.conf seem invalid: $@\n" if $@;
}
die "Couldn't find a valid Data Source Name (DSN).\n" if !$dsn;
@@ -0,0 +1,64 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 7;
+use lib 't/lib';
+use FakeCatalystObject;
+
+BEGIN {
+ use_ok 'MojoMojo::Formatter::IDLink';
+ use_ok 'Catalyst::Test', 'MojoMojo';
+}
+
+my $fake_c;
+( undef, $fake_c ) = ctx_request('/');
+
+{
+ my $content = 'ask {{id bayashi}}';
+ MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+ is(
+ $content,
+ qq|ask <a href="http://twitter.com/bayashi">bayashi</a>\n|,
+ 'default',
+ );
+}
+
+{
+ my $content = 'ask {{id:htb bayashi_net}}';
+ MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+ is(
+ $content,
+ qq|ask <a href="http://b.hatena.ne.jp/bayashi_net">bayashi_net</a>\n|,
+ 'htb',
+ );
+}
+
+{
+ my $content = 'ask {{id:htd bayashi_net}}';
+ MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+ is(
+ $content,
+ qq|ask <a href="http://d.hatena.ne.jp/bayashi_net">bayashi_net</a>\n|,
+ 'htd',
+ );
+}
+
+{
+ my $content = 'ask {{id:cpan bayashi}}';
+ MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+ is(
+ $content,
+ qq|ask <a href="http://search.cpan.org/~bayashi/">bayashi</a>\n|,
+ 'cpan',
+ );
+}
+
+{
+ my $content = 'ask {{id:fb dai.okabayashi}}';
+ MojoMojo::Formatter::IDLink->format_content(\$content, $fake_c);
+ is(
+ $content,
+ qq|ask <a href="http://facebook.com/dai.okabayashi">dai.okabayashi</a>\n|,
+ 'facebook',
+ );
+}